package com.aorise.service.system;


import com.aorise.model.response.UserInfoRes;
import com.aorise.model.system.User;
import com.aorise.model.request.RegisterUserReq;
import com.aorise.model.response.UserListRes;
import com.aorise.utils.Page;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * @Auther: zhouhao
 * @Date: 2019/4/26
 * @Description:
 */
public interface UserService extends BaseService{

    /**
     * 根据角色ID查询用户
     * @param roid 角色ID
     * @return List<User> 用户集合
     */
    List<User> selectByRole(Integer roid);

    /**
     * 用户类型查询用户
     * @param account 帐号
     * @param userType  用户类型
     * @return List<User> 用户集合
     */
    List<User> selectByAccount(String account, Integer userType);

    /**
     * 分页条件筛选查询用户
     * @param userRes 入参
     * @return PageInfo<UserListRes> 分页用户
     */
    Page selectUserList(UserListRes userRes);

    /**
     * 添加用户
     * @param userReq 入参
     * @return ture/false
     */
    boolean addUser(RegisterUserReq userReq);

    /**
     * 删除用户
     * @param id 用户ID
     * @return ture/false
     */
    boolean deleteUser(Integer id);

    /**
     * 重置密码
     * @param userId 用户ID
     * @return ture/false
     */
    boolean resetPwdByUserId(@NotNull(message = "用户ID不能为空") Integer userId);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param password 用户密码
     * @return ture/false
     */
    boolean changePwdById(Integer userId, String password);

    /**
     * 根据用户ID查询单个用户
     * @param userId 入参
     * @return User 用户
     */
    User selectByUserId(Integer userId);

    /**
     * 更新用户
     * @param userReq 入参
     * @param userId 用户ID
     * @return ture/false
     */
    boolean updateUser(RegisterUserReq userReq, Integer userId);

    /**
     * 根据用户ID查询单个用户详情
     * @return UserInfoRes 用户详情
     */
    UserInfoRes selectUserInfoByUserId(Integer userId);

    /**
     * 查询所有拥有APP权限的用户
     * @return
     */
    List<User> selectUserByApp();

    /**
     * 查询当前用户的工单、停机、迁建 未完成总数
     * @param userId
     * @return
     */
    String isWorkUser(Integer userId);
}
